#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <errno.h>

void handle_sigpipe(int sig) {
    printf("SIGPIPE caught: %d\n", sig);
}

int main() {
    int pipefd[2];
    pipe(pipefd);
    signal(SIGPIPE,handle_sigpipe);
    if (fork() == 0) {  // 子进程
        close(pipefd[0]); // 关闭读端
        sleep(1); // 等待父进程关闭读端
        if (write(pipefd[1], "Hello", 5) == -1) {
            perror("Write error");
        }
        close(pipefd[1]); // 关闭写端
    } else {  // 父进程
        close(pipefd[1]); // 关闭写端
        close(pipefd[0]); // 关闭读端
        sleep(2);         // 等待子进程写入
    }
    return 0;
}
